package com.kclm.se.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import jdk8.stream.Order;

public class MethodInvokeDemo {

	public static void main(String[] args) throws Exception {
		//
		Order o1 = new Order();
		//
		o1.setOrdNo("1001001");
		//
		System.out.println(o1.getOrdNo());
		//通过反射 来做同样的事情
		//1. 获取 Class 实例
		Class<Order> ordClass = Order.class;
		//2.通过反射 来创建对象
		Constructor<Order> defaultConstructor = ordClass.getDeclaredConstructor();
		//3.调用默认构造器来创建对象
		Order o2 = defaultConstructor.newInstance();
		System.out.println(" 在调用 setOrdNo之前："+o2.getOrdNo());
		//4. 获取它的 setOrdNo 方法
		Method setOrdNoMethod = ordClass.getDeclaredMethod("setOrdNo", String.class);
		//如果是私有方法，则需要调用： [公开方法可以省略]
		//setOrdNoMethod.setAccessible(true);
		//5. 调用
		setOrdNoMethod.invoke(o2, "2002002");
		//
		System.out.println(o2.getOrdNo());
	}
}
